package com.bjpowernode.boss.util;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;

import javax.xml.crypto.Data;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * jwt工具类
 */
public class JWTUtil {
    
    // 自定义秘钥
    public static final String JWT_SECRET = "W0fd3)iYp@uy34dsb/0OT";

    /**
     * 生成jwt
     *
     * @return
     */
    //data存储在jwt的数据，超时时间timeoutMinute
    public static String createJWT(String data, int timeoutMinute) {
        //组装头数据
        Map<String, Object> header = new HashMap<>();
        header.put("alg", "HS256");
        header.put("typ", "JWT");

        //设置过期时间，DateUtil，hutool工具库中的工具类，
        // 若“timeoutMinute”为正数则代表在当前时间+上120分钟后过期，同理若为负数则反之
        DateTime expireDate = DateUtil.offsetMinute(new Date(), timeoutMinute);

        //链式编程
        return JWT.create()
                //头部
                .withHeader(header)
                //过期时间
                .withExpiresAt(expireDate)
                //负载：自定义数据
                .withClaim("data", data)
                //签名：前面需要指定一个密钥
                .sign(Algorithm.HMAC256(JWT_SECRET));
    }
}